import sqlite3  # 导入sqlite3模块

# 连接到数据库文件，如果文件不存在，会自动创建
conn = sqlite3.connect('example.db')

cursor = conn.cursor()

# 创建表
"""
CREATE TABLE IF NOT EXISTS: 创建表的SQL命令，如果表已经存在，则不会创建新表
user: 表的名称
id, name, age, email: 表中的列（字段）名称
INTEGER PRIMARY KEY AUTOINCREMENT: 定义id列的数据类型为整数，并且作为主键自动递增
TEXT: 定义文本类型的数据
NOT NULL: 约束，表示该列的值不能为NULL
UNIQUE: 约束，表示该列的值必须唯一，不能有重复
"""
cursor.execute('''CREATE TABLE IF NOT EXISTS user (
                id INTEGER PRIMARY KEY AUTOINCREMENT,
                name TEXT NOT NULL,
                age INTEGER,
                email TEXT UNIQUE)''')


# 插入数据函数
def insert():
    # 新增数据
    cursor.execute("INSERT INTO user (name, age, email) VALUES ('Alice', 25, 'alice@example.com')")
    cursor.execute("INSERT INTO user (name, age, email) VALUES ('Bob', 30, 'bob@example.com')")
    cursor.execute("INSERT INTO user (name, age, email) VALUES ('Cathy', 28, 'cathy@example.com')")
    # 提交事务
    conn.commit()


# 查询数据函数
def select():
    """编写SELECT查询语句
        SELECT: 查询命令，用于从数据库表中选择数据
        name, age: 字段名，表示要查询的字段
        FROM: 指定查询的数据来自哪个表
        user: 表名，表示要查询的表
        WHERE: 条件语句，用于过滤数据
        age > 25: 条件，表示只选择年龄大于25的记录
        ORDER BY: 排序命令，用于对查询结果进行排序
        age DESC: 表示按年龄降序排序
    """

    # 查询所有数据
    cursor.execute("SELECT * FROM user")
    rows = cursor.fetchall()
    for row in rows:
        print(row)

    # 查询指定列
    cursor.execute("SELECT name, age FROM user")
    rows = cursor.fetchall()
    for row in rows:
        print(row)

    # 查询指定条件的数据
    cursor.execute("SELECT * FROM user WHERE age > 25")
    rows = cursor.fetchall()
    for row in rows:
        print(row)

    # 查询指定列，指定条件的数据
    cursor.execute("SELECT name, age FROM user WHERE age > 25")
    rows = cursor.fetchall()
    for row in rows:
        print(row)

    # 查询指定列，指定条件的数据，排序
    cursor.execute("SELECT name, age FROM user WHERE age > 25 ORDER BY age DESC")
    rows = cursor.fetchall()
    for row in rows:
        print(row)


# 更新数据
def update():
    # 更新数据
    cursor.execute("UPDATE user SET age = 31 WHERE name = 'Bob'")
    """
        UPDATE: SQL命令，用于更新表中的数据
        user: 要更新的表的名称
        SET: 用于指定要更新的字段及其新值
        age = 31: 将age字段的值更新为31
        WHERE: 条件语句，用于指定哪些记录将被更新
        name = 'Bob': 条件，表示只有当记录的name字段值为'Bob'时，才更新该记录
    """
    # 提交事务
    conn.commit()


# 删除数据
def delete():
    # 删除数据
    cursor.execute("DELETE FROM user WHERE name = 'Cathy'")
    """
        DELETE: SQL命令，用于删除表中的数据
        user: 要删除数据的表的名称
        WHERE: 条件语句，用于指定要删除的记录
        name = 'Cathy': 条件，表示只删除name字段值为'Cathy'的记录
    """
    # 提交事务
    conn.commit()


delete()
